﻿package  {
	
	import Fases.FasesJogoParametros;
	import flash.display.MovieClip;
	import flash.events.TimerEvent;
	import flash.media.Sound;
	import flash.media.SoundChannel;
	import flash.utils.Timer;
	import Inimigos.Inimigo;
	import TangoGames.*;
	import TangoGames.Atores.AtorAnimacao;
	import TangoGames.Atores.AtorBase;
	import TangoGames.Atores.AtorInterface;
	import TangoGames.Utils;
	import flash.ui.Keyboard;
	import flash.events.Event;
	
	public class Heroi extends AtorBase implements AtorInterface
	{	
		//constantes de estado do barco inimigo
		public static const ESTADO_NORMAL        		:uint = 0;
		public static const ESTADO_ASSUSTADO        	:uint = 1;
		
		//Enumeração de direção
		public static const DIRECAO_CIMA				:uint =  1;
		public static const DIRECAO_BAIXO				:uint =  2;
		public static const DIRECAO_DIREITA				:uint =  3;
		public static const DIRECAO_ESQUERDA			:uint =  4;

		//estado
		private var UI_estado					:uint = 0;
		private var UI_frames					:uint = 0;
		private var UI_randonframes				:uint = 0;
		
		private var MC_Heroi:MovieClip;
		public var MC_HeroiHit:MovieClip;
		
		//Direcao do heroi
		private var UI_direcao:uint = 2;
		
		//timer
		private var TM_timer:Timer;
		
		//batimentos cardiacos corente
		public var UI_Batimentos_Corrente;
		public var UI_Batimentos_Normal;

		private var cima:Boolean = false;
		private var baixo:Boolean = false;
		private var direita:Boolean = false;
		private var esquerda:Boolean = false;
		
		//Sons
		private var _canalSom:SoundChannel;
		//private var _canalSom2:SoundChannel;
		private var _somcoracao1:Sound;
		private var _somcoracao2:Sound;
		private var tocasom2 = false;
		private var tocasom1 = true;
		private var controleBatimento:int;
		
		//CONTROLE SUSTO
		
		public function Heroi() {
			// constructor code
			MC_Heroi = new Personagem();
			super(MC_Heroi);
			iniciaAnima(MC_Heroi, "pose");
			paraAnima("pose");
			//MC_Heroi.stop();
			MC_HeroiHit = new MovieClip();
			_canalSom = new SoundChannel();
			//_canalSom2 = new SoundChannel();
			_somcoracao1 = new heartbeat01();
			_somcoracao2 = new heartbeat02();
			_canalSom = _somcoracao1.play(0, 99999);
			controleBatimento = Batimentos_Corrente;
		}
		
		public function inicializa():void
		{
			//Inicializa batimentos
			UI_Batimentos_Normal	= this.faseAtor.param[FasesJogoParametros.PARAM_BATIMENTOS_CARDIACO_NORMAL];
			UI_Batimentos_Corrente = UI_Batimentos_Normal;
			
			TM_timer = new Timer(500);
			TM_timer.addEventListener(TimerEvent.TIMER, onTimer, false, 0, true);
			TM_timer.start();
			
			UI_estado = 0;
			
		}

		
		public function update(e:Event):void
		{	
			controleHeroi();
			limitesHeroi();
			controleAnimacao();
			this.controleAnima();
			MC_HeroiHit = MC_Heroi.hit;
			
			if (UI_estado == ESTADO_ASSUSTADO) 
			{
				UI_frames ++;
				if (UI_frames < 30)
				{
					visible = !visible;
				}
				else
				{
					UI_frames = 0;
					visible = true;
					UI_estado = ESTADO_NORMAL;
				}
			}
			trocaSom();
			
		}
		private function trocaSom():void {
			if (Batimentos_Corrente >= 135) {
				if (tocasom2 == false) {
					_canalSom.stop();
					tocasom2 = true;
					tocasom1 = false;
					//trace("trocou");
					_canalSom = _somcoracao2.play(0, 999999);
				}
			}
			else if (Batimentos_Corrente <= 135) {
				if (tocasom1 == false) {
					_canalSom.stop();
					tocasom1 = true;
					tocasom2 = false;
					//_canalSom2 = _somcoracao1.play(0, 999999);
					_canalSom = _somcoracao1.play(0, 999999);
				}
			}
			
		}
		
		private function onTimer(e:TimerEvent):void 
		{
			update_batimento();
		}
		
		private function update_batimento()
		{
			if (UI_Batimentos_Corrente > UI_Batimentos_Normal) UI_Batimentos_Corrente -= 1;
		}
		
		private function controleAnimacao():void 
		{
			if (direita == true)
				this.trocaAnima("dir");
			
			else if (esquerda == true)
				this.trocaAnima("esq");
			
			else if (baixo == true)
				this.trocaAnima("baixo");	
			
			else if (cima == true)
				this.trocaAnima("cima");
			
			else(paraAnima());
		}
		
		
		private function controleHeroi():void
		{
			if (pressTecla(Keyboard.W) ) {
				cima = true;
				UI_direcao = DIRECAO_CIMA ;
				this.y -= 3;
			}
			else
			cima = false;
			if (pressTecla(Keyboard.S)) {
				baixo = true;
				UI_direcao = DIRECAO_BAIXO;
				this.y += 3;				
			}
			else
			baixo = false;
			if (pressTecla(Keyboard.D)) {
				direita = true;
				UI_direcao = DIRECAO_DIREITA;
				this.x += 3;	
			}
			else
			direita = false;
			if (pressTecla(Keyboard.A)) {
				esquerda = true;
				UI_direcao = DIRECAO_ESQUERDA;
				this.x -= 3;
			}
			else
			esquerda = false;
		}
		
	
		
		private function limitesHeroi():void 
		{
			if (this.x <= 10 + this.width / 2) {
				this.x = this.x = 10 + this.width / 2;
			}
			if (this.x >= stage.stageWidth - 10 - this.width / 2) {
				this.x = stage.stageWidth - 10- this.width / 2;
			}
			if (this.y >= stage.stageHeight - 10 - this.height / 2) {
				this.y = stage.stageHeight - 10 - this.height / 2;
			}
			if (this.y <= 10 + this.height / 2) {
				this.y = 10 + this.height / 2;
			}
		}
		
		public function reinicializa():void {
			UI_Batimentos_Corrente = UI_Batimentos_Normal;
			_canalSom.stop();
			_canalSom = _somcoracao1.play(0, 99999);
		}
		public function remove():void {
			
			_canalSom.stop();
		
		}
		
		/**
		 * Batimentos cardiacos corrente
		 */
		public function get Batimentos_Corrente():uint 
		{
			return UI_Batimentos_Corrente;
		}
		
		public function set Batimentos_Corrente(value:uint):void 
		{
			UI_Batimentos_Corrente = value;
		}
		
		/**
		 * Direcao do heroi
		 */
		public function get Direcao():uint 
		{
			return UI_direcao;
		}
		
		public function set Direcao(value:uint):void 
		{
			UI_direcao = value;
		}
		
		
		public function susto(ini:Inimigo):void
		{
			if ( ini.estado != Inimigo.ESTADO_ATACANDO_HEROI && UI_estado != ESTADO_ASSUSTADO  ) {
				UI_Batimentos_Corrente += ini.batimentos_susto;				
				ini.assustou_Heroi()
				UI_estado = ESTADO_ASSUSTADO;
				UI_frames = 0
			}
			
		}
		
	}
	
}
